package PTA_05_24;

import java.util.*;
//分析，这道题讲到了两点。
//第一点，对于输入时候的数据我们需要用一个集合来存储，并且保证不能被覆盖
//第二点，我们在输出时明显看到数据都已经覆盖过了，并且输出的是相同的数据有几个
//那么，我们要知道，Set类保证了数据不重复，List类保证数据全存入

public class Main2 {
    public static void main(String[] args) {
        HashMap<String, Integer> hashMap = new HashMap<>();
        List<String> inputList = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);

        while (true) {
            String input = scanner.nextLine();
            if (input.equals("end")) {
                break;
            }

            String[] employees = input.split(" ");
            for (String employee : employees)
            {
                hashMap.put(employee, hashMap.getOrDefault(employee,0) + 1);//在Map类Value中存储数据的个数
                if (!inputList.contains(employee))//同时将该数据放入到List集合中
                {
                    inputList.add(employee);
                }
            }
        }

        List<String> outputList = new ArrayList<>();//用于输出的集合
        for (String employee : inputList) {
            int Count = hashMap.get(employee);
            outputList.add(employee + " " + Count);//将数据存入
        }
        Collections.sort(outputList, (new Comparator<String>() {//Comparable  --- compareTo
                    @Override
                    public int compare(String s1,String s2) {
                        int Count1 = Integer.parseInt(s1.split(" ")[1]);
                        int Count2 = Integer.parseInt(s2.split(" ")[1]);
                            return Count2 - Count1;
                    }
                }));


//        Collections.sort(outputList, (s1, s2) -> {   //Lambda表达式  相当于重写Comparator方法
//            int count1 = Integer.parseInt(s1.split(" ")[1]);
//            int count2 = Integer.parseInt(s2.split(" ")[1]);
//            if (count1 != count2) {
//                return count2 - count1;
//            } else {
//                int index1 = inputList.indexOf(s1.split(" ")[0]);
//                int index2 = inputList.indexOf(s2.split(" ")[0]);
//                return index1 - index2;
//            }
//        });
        for (String result : outputList) {
            System.out.println(result);
        }
    }
}
